﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Sireass.Bl;
using log4net;
using Sireass.Asp.Util;
using Telerik.Web.UI;

namespace Sireass.Asp.Administracion
{
	public partial class SeguridadPerfilServicios : System.Web.UI.Page
	{
		private PerfilServicioList psl = null;
		private PerfilEdit perfil = null;
		private byte idPerfil;
		private ServicioList sl = null;
		// Create a logger for use in this class
		private static readonly ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

		#region Page
		protected void Page_Load(object sender, EventArgs e)
		{
			if (!IsPostBack)
			{				
				Security.ValidarSeguridad(Response, HttpContext.Current.User.Identity, typeof(PerfilServicioList));
				idPerfil = Convert.ToByte(Server.UrlDecode(Request.QueryString["idPerfil"]));
				ViewState["vwsIdPerfil"] = idPerfil;
				perfil = PerfilEdit.GetPerfilEdit(idPerfil);
				ViewState["vwsPerfil"] = perfil.Perfil;
				lblPerfil.Text = perfil.Perfil;
				chkPerfilHabilitado.Checked = perfil.Habilitado;
				CargarPerfilServicios();
			}
			else
			{
				lblExito.Text = string.Empty;
				lblError.Text = string.Empty;
			}
		}
		#endregion

		#region Botones
		protected void radBtnCancelar_Click(object sender, EventArgs e)
		{
			//LimpiarControles();
			mvwAdministracionPerfilServicios.ActiveViewIndex = 0;
		}

		protected void radBtnRegresar_Click(object sender, EventArgs e)
		{
			Response.Redirect("~/Administracion/SeguridadPerfiles.aspx");
		}

		protected void radBtnGuardar_Click(object sender, EventArgs e)
		{
			RadButton btn = (RadButton)sender;
			if (btn.Text == "Guardar")
			{
				if (GuardarServicios() == true)
				{
					lblExito.Text = "Operación realizada con éxito";
				}
				else return;
			}			
			CargarPerfilServicios();
			mvwAdministracionPerfilServicios.ActiveViewIndex = 0;
			//LimpiarControles();
		}
		#endregion

		#region GridListado
		protected void radGrdListado_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
		{
			try
			{
				string strComando = e.CommandName;
				long idPerfilServicio;
				switch (strComando)
				{					
					case "AsignarServicios":
						lblRegistroEdicion.Text = "Seleccione los servicios que desea asignar al Perfil:";
						CargarServicios();
						mvwAdministracionPerfilServicios.ActiveViewIndex = 1;
						break;
					case "Eliminar":
						idPerfilServicio = (long)radGrdListado.MasterTableView.Items[e.Item.ItemIndex].GetDataKeyValue("IdPerfilServicio");
						if (Eliminar(idPerfilServicio) == true)
						{
							CargarPerfilServicios();
						}
						break;					
					default: break;
				} //fin switch
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}

		protected void radGrdListado_PageIndexChanged(object sender, GridPageChangedEventArgs e)
		{
			CargarPerfilServicios();
		}

		protected void radGrdListado_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
		{
			CargarPerfilServicios();
		}

		protected void radGrdListado_PreRender(object sender, EventArgs e)
		{
			try
			{
				CheckBox chk;
				string strHabilitado;
				foreach (GridDataItem celda in radGrdListado.Items)
				{
					chk = (CheckBox)celda["Activado"].FindControl("chkHabilitado");
					strHabilitado = celda["Habilitado"].Text;

					if (strHabilitado == "True")
						chk.Checked = true;

					else
						chk.Checked = false;
				}
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}
		#endregion

		#region GridServicios
		protected void radGrdServicios_PageIndexChanged(object sender, GridPageChangedEventArgs e)
		{
			CargarServicios();
		}
		protected void radGrdServicios_PageSizeChanged(object sender, GridPageSizeChangedEventArgs e)
		{
			CargarServicios();
		}
		protected void radGrdServicios_PreRender(object sender, EventArgs e)
		{
			try
			{
				CheckBox chk;
				string strHabilitado;
				foreach (GridDataItem celda in radGrdServicios.Items)
				{
					chk = (CheckBox)celda["Activado"].FindControl("chkHabilitado");
					strHabilitado = celda["Habilitado"].Text;
					if (strHabilitado == "True")
						chk.Checked = true;
					else
						chk.Checked = false;
				}
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
			}
		}
		#endregion

		#region Métodos
		protected Boolean GuardarServicios()
		{
			try
			{
				byte idPerfil = (byte)ViewState["vwsIdPerfil"];
				foreach (GridDataItem celda in radGrdServicios.Items)
				{
					CheckBox chk;
					chk = (CheckBox)celda["Seleccionar"].FindControl("chkSeleccionar");
					if (chk.Checked)
					{
						long idServicio = (long)celda.GetDataKeyValue("IdServicio");
						PerfilServicioEdit pse = PerfilServicioEdit.NewPerfilServicioEdit();
						pse.IdPerfil = idPerfil;
						pse.IdServicio = idServicio;
						pse.Habilitado = true;
						pse.Save();
					}
				}
				return true;
			}
			catch (Exception e)
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				if (log.IsErrorEnabled)
				{
					log.Error("Exception: " + e.Message);
					log.Error("Exception: " + e.StackTrace);
				}
				return false;
			}
		}		

		protected Boolean Eliminar(long idPerfilServicio)
		{
			try
			{
				PerfilServicioEdit.DeletePerfilServicioEdit(idPerfilServicio);
				return true;
			}
			catch
			{
				lblError.Text = "Ocurrió un error al actualizar los datos. Inténtelo de nuevo";
				return false;
			}
		}		

		protected Boolean CargarPerfilServicios() //para cargar el grid
		{
			try
			{
				byte idPerfil = (byte)ViewState["vwsIdPerfil"];
				string perfil = (string)ViewState["vwsPerfil"];
				PerfilServicioCriteria criteria = new PerfilServicioCriteria(perfil, null, true);
				psl = PerfilServicioList.GetPerfilServicioList(criteria);
				radGrdListado.DataSource = psl;
				radGrdListado.DataBind();
				return true;
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
				return false;
			}
		}

		protected Boolean CargarServicios()
		{
			try
			{
				byte idPerfil = (byte)ViewState["vwsIdPerfil"];
				ServicioCriteria criteria = new ServicioCriteria(idPerfil, true);
				sl = ServicioList.GetServicioList(criteria);
				radGrdServicios.DataSource = sl;
				radGrdServicios.DataBind();
				return true;
			}
			catch (Exception ex)
			{
				lblError.Text = ex.Message;
				return false;
			}
		}

		//private void LimpiarControles()
		//{
		//    rtxtPerfil.Text = string.Empty;
		//    chkActivo.Checked = false;
		//    radBtnGuardar.Text = "Guardar";
		//    ViewState["vwsIdPerfil"] = null;
		//}
		#endregion

	}
}